package com.navinfo.platform.trip.common.arithmetic.enums;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 事件类型
 * @author wangshuai、web
 */
public enum EventType {
    /**
     * 加油事件
     * */
    fuelCharge(0x01, 11001),
    /**
     * 漏油事件
     * */
    fuelLeak(0x02, 11002),
    /**
     * 点火事件
     * */
    ignite(0x03, 11003),
    /**
     * 熄火事件
     * */
    flameout(0x04, 11004),
    /**
     * 刹车事件
     * */
    brake(0x05, 11005),
    /**
     * 空挡滑行事件
     * */
    idlingSlide(0x06, 11006),
    /**
     * 巡航事件
     * */
    cruise(0x07, 11007),
    /**
     * ECO驾驶事件
     * */
    ecoDriving(0x08, 11008),
    /**
     *  换挡事件
     **/
    shiftGears(0x09, 11009),
    /**
     *  急减速事件
     * */
    sharpDeceleration(0x0A, 11010),
    /**
     *   无使用，冷车急加速事件
     * */
    coldSharpAcceleration(0x0B, 11011),
    /** 急加速事件
     * */
    sharpAcceleration(0x0C, 11012),
    /**
     * 急油门事件
     * */
    sharpStepOnAccelerator(0x0D, 11013),
    /**
     * 发动机超速事件
     * */
    engineOverSpeed(0x0E, 11014),
    /**
     * 车辆超速事件
     **/
    vehicleOverSpeed(0x0F, 11015),
    /**
     * 怠速事件
     * */
    vehicleParkingIdle(0x10, 11016),
    /**
     *  无使用，急转向事件
     * */
    sharpCurve(0x11, 11017),
    /**
     *  无使用，司机登陆
     * */
    login(0x12, 11018),
    /**
     *  无使用，司机登出
     * */
    logout(0x13, 11019),
    /**
     *  在挡滑行
     * */
    paringRangeSlide(0x14,11020),
    /**
     *  疲劳驾驶事件
     **/
    fatigueDriving(0x15, 11021),
    /**
     *   无使用，油量检测器正常/异常事件
     **/
    oilDetectorStateChanged(0x16, 11022),
    /**
     *   无使用，超长时间停车事件
     **/
    exceedTimeParking(0x17, 11023),
    /**
     *   无使用，重大事故上报
     **/
    majorAccidentReport(0x18, 11024),
    /**
     *   无使用，电子围栏事件
     **/
    electricFence(0x19, 11025),
    /**
     *  车辆起步事件
     **/
    vehicleStart(0x1A, 11026),
    /**
     *  发动机低转速事件（脱档）
     **/
    engineLowSpeed(0x1B, 11027),

    /**
     *   无使用，路线监控时间(其它模块加入）
     **/
    trajectory(0x1C, 11028),
    /**
     *   无使用，终端断开重连(其它模块加入）
     **/
    terminalCloseOpen(0x1D, 11029),
    /**
     *   无使用，停车轰油门事件
     **/
    parkingStepOnAccelerator(0x1E, 11030),
    /**
     *   无使用，转速区间统计事件
     **/
    rotationRange(0x1F, 11031),
    /**
     *   无使用，速度区间统计事件
     **/
    speedRange(0x20, 11032),
    /**
     *  无使用，海拔区间统计事件
     **/
    altitudeRange(0x21, 11033),
    /**
     *  单独0200算法链的弯道超速报警
     **/
    speedOverCurve_0200(0x22, 11034),
    /**
     *  单独0200算法链的停车事件
     **/
    parking_0200(0x23, 11035),
    /**
     *  单独0200算法链的车辆超速事件
     **/
    speedOver_0200(0x24, 11036),
    /**
     *  单独0200算法链的经过漏油点事件
     **/
    fuleLeakLocation_0200(0x25, 11037),


    /**
     *  东风急转弯事件
     **/
    sharpTurning_DF(0x26, 11038),
    /**
     *  东风夜晚开车事件
     **/
    drivingNight_DF(0x27, 11039),
    /**
     *  东风发动机高转速事件（脱档）
     **/
    rotationOver_DF(0x28, 11040),
    /**
     *  东风全油门事件
     **/
    fullAccelerator_DF(0x29, 11041),
    /**
     *  东风大油门事件
     **/
    largeAccelerator_DF(0x2A, 11042),
    /**
     *  东风超长怠速事件
     **/
    idleLong_DF(0x2B, 11043),
    /**
     *  东风冷车运行事件
     **/
    drivingCold_DF(0x2C, 11044),
    /**
     * 东风急加速事件
     */
    sharpAcceleration_DF(0x2D, 11045),
    /**
     * 东风急减速事件
     */
    sharpDeceleration_DF(0x2E, 11046),
    /**
     * 东风高速行驶事件
     */
    speedOver_DF(0x2F, 11047),
    /**
     * 东风熄火滑行事件
     */
    coastFlameout_DF(0x30, 11048),
    /**
     * 东风空挡滑行事件
     */
    coastNeutralGear_DF(0x31, 11049),

    /**
     *  东风新版，冷车运行事件
     **/
    drivingCold_DFN(0x32, 11050),
    /**
     *  东风新版，夜晚开车事件
     **/
    drivingNight_DFN(0x33, 11051),
    /**
     *  东风新版，紧急停车事件
     **/
    emergencyStop_DFN(0x34, 11052),

    /**
     * 东风新版，非ECO转速驾驶事件
     * */
    noEcoDriving(0x35, 11053);

    public static final Map<Integer, EventType> CACHE=new LinkedHashMap<>();


    public final int index;
    public final int value;

    EventType(int index, int value) {
        this.index = index;
        this.value = value;
    }
    public final int getNumber(){
        return index;
    }

    public static EventType valueOf(int index) {
        if(CACHE.size()==0){
            for(EventType event: EventType.values()){
                CACHE.put(event.index, event);
            }
        }
        return CACHE.get(index);
    }

}
